package com.satoken.controller;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import com.satoken.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @RequestMapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    // 退出 http://localhost:8081/user/logout
    @GetMapping("/logout")
    public boolean logout(){
        String tokenValue = StpUtil.getTokenValue();
        StpUtil.logoutByTokenValue(tokenValue);
        return true;
    }

    @GetMapping("/setUser")
    public void setUser(){
        // 在登录时缓存 user 对象
        StpUtil.getSession().set("user", new User(1L,"张三","123"));
    }

    // sa-token中的session和HttpSession不是同一个东西!!!
    @GetMapping("/getUser")
    public User getUser(HttpSession session){//这个是httpSesion和SaSession不是一个玩意
        System.out.println("session.getAttribute = " + session.getAttribute("user"));//这个获取不到,因为我们存放是在SaSession中
        return (User) StpUtil.getSession().get("user");
    }

    @GetMapping("/getSession")
    public SaSession getSession(){
        return StpUtil.getSession();
    }

    @GetMapping("/getTokenSession")
    public SaSession getTokenSession(){
        return StpUtil.getTokenSession();
    }


}
